#include "Joueur.h"

Joueur::Joueur(Coord coord){
	this->skin = "<|-O-|>";
	this->state[0] = ST_OK;
	this->state[1] = ST_GUN;
	this->state[2] = ST_OK;
	this->state[3] = ST_HEAD;
	this->state[4] = ST_OK;
	this->state[5] = ST_GUN;
	this->state[6] = ST_OK;
	this->coord = coord;
	this->laserCooldown = 0;
	this->laserSpeed = 20;
}

void Joueur::putVaisseau(){
	coord.gotoxy(coord.getPositionX(),coord.getPositionY());
	cout << this->skin;
}

void Joueur::removeVaisseau(){
	coord.gotoxy(coord.getPositionX(),coord.getPositionY());
	cout<<"       ";
}

void Joueur::modifierPosition(char key){
	Coord newposition = this->coord;
	if(key == CTL_HAUT)
		newposition.setPositionY(newposition.getPositionY()-1);
	else if(key == CTL_BAS)
		newposition.setPositionY(newposition.getPositionY()+1);
	else if(key == CTL_GAUCHE)
		newposition.setPositionX(newposition.getPositionX()-1);
	else if(key == CTL_DROITE)
		newposition.setPositionX(newposition.getPositionX()+1);
	else
		return;

	if(verifierMouvement(newposition))
		return;

	removeVaisseau();
	this->coord = newposition;
	putVaisseau();
	//verifierCollision();
}

bool Joueur::verifierMouvement(Coord newposition){
	if( (newposition.getPositionX() <= conf.getCadreJeu().cd) ||
		(newposition.getPositionX() + VAISSEAU_LONGEUR - 1 >= conf.getCadreJeu().cf) ||
		(newposition.getPositionY() <= conf.getCadreJeu().ld) ||
		(newposition.getPositionY() >= conf.getCadreJeu().lf) )
		return true;
	return false;
}

int Joueur::getState(int i){
	return this->state[i];
}

void Joueur::setState(int i,int st){
	this->state[i] = st;
}

void Joueur::laserTick(){
	if(this->laserCooldown>0)
		this->laserCooldown--;
}

bool Joueur::laserState(){
	return (this->laserCooldown?true:false);
}

void Joueur::laserAddCooldown(){
	this->laserCooldown = this->laserSpeed;
}

void Joueur::setLaserSpeed(int speed){
	this->laserSpeed = speed;
}